#region

using System;
using Gurock.SmartInspect;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;

#endregion

namespace SmartInspect.Extensions.Unity
{
    public class SiBaseAttribute : HandlerAttribute
    {
        /// <summary>
        ///   Constructor. Sets the standards.
        /// </summary>
        protected SiBaseAttribute()
        {
            TypePolicy = TypePolicy.FullQualifiedName;
            Level = Level.Message;
        }

        /// <summary>
        ///   Will be appended to automatically generated method names.
        /// </summary>
        public string NameSuffix { get; set; }

        /// <summary>
        ///   Will be prepended to automatically generated method names.
        /// </summary>
        public string NamePrefix { get; set; }

        /// <summary>
        ///   Set this to false if you don't want to log method arguments.
        /// </summary>
        public bool LogArgumentsToViewer { get; set; }

        /// <summary>
        ///   Defines the separator between the NameSuffix and the 
        ///   Name by itself. Empty by default.
        /// </summary>
        public string SuffixSeparator { get; set; }

        /// <summary>
        ///   Defines the separator between the NamePrefix and the 
        ///   Name by itself. Empty by default.
        /// </summary>
        public string PrefixSeparator { get; set; }

        /// <summary>
        ///   Defines the SmartInspect log level. This is Level.Message 
        ///   by default.
        /// </summary>
        public Level Level { get; set; }

        /// <summary>
        ///   Defines the name policy for types of auto-generated names.
        /// </summary>
        protected TypePolicy TypePolicy { get; private set; }

        /// <summary>
        ///   Virtual method for derrived classes. This is the standard
        ///   method for creating the call handler in unity.
        /// </summary>
        /// <param name = "container"></param>
        /// <returns></returns>
        public override ICallHandler CreateHandler(IUnityContainer container)
        {
            throw new NotImplementedException();
        }
    }
}